using System;
using System.ComponentModel.DataAnnotations;
using Matrix.Notification.Domain.Shared.Notifications;

namespace Matrix.Notification.Notifications
{
    /// <summary>
    /// 通知统计过滤条件DTO
    /// </summary>
    public class NotificationStatisticsFilterDto
    {
        /// <summary>
        /// 开始时间
        /// </summary>
        public DateTime? StartTime { get; set; }

        /// <summary>
        /// 结束时间
        /// </summary>
        public DateTime? EndTime { get; set; }

        /// <summary>
        /// 通知渠道过滤
        /// </summary>
        public NotificationChannel? Channel { get; set; }

        /// <summary>
        /// 通知类型过滤
        /// </summary>
        public NotificationType? Type { get; set; }

        /// <summary>
        /// 通知状态过滤
        /// </summary>
        public NotificationStatus? Status { get; set; }

        /// <summary>
        /// 通知优先级过滤
        /// </summary>
        public NotificationPriority? Priority { get; set; }

        /// <summary>
        /// 分类过滤
        /// </summary>
        [StringLength(100)]
        public string? Category { get; set; }

        /// <summary>
        /// 接收者ID过滤
        /// </summary>
        public Guid? RecipientId { get; set; }

        /// <summary>
        /// 发送者ID过滤
        /// </summary>
        public Guid? SenderId { get; set; }

        /// <summary>
        /// 租户ID过滤
        /// </summary>
        public Guid? TenantId { get; set; }

        /// <summary>
        /// 关联类型过滤
        /// </summary>
        [StringLength(100)]
        public string? RelatedEntityType { get; set; }

        /// <summary>
        /// 是否只统计已读通知
        /// </summary>
        public bool ReadOnly { get; set; } = false;

        /// <summary>
        /// 是否只统计未读通知
        /// </summary>
        public bool UnreadOnly { get; set; } = false;

        /// <summary>
        /// 是否只统计失败的通知
        /// </summary>
        public bool FailedOnly { get; set; } = false;

        /// <summary>
        /// 是否只统计成功的通知
        /// </summary>
        public bool SuccessOnly { get; set; } = false;
    }
}